package com.xu.cloud.common.constant;

/**
 * 序号常量
 * 过滤器, 拦截器, 序号越小级别越高
 *
 * @author xuguan
 * @since 2024/12/23
 * @see org.springframework.core.Ordered
 * @see org.springframework.core.PriorityOrdered
 * @see org.springframework.core.annotation.Order
 * @see org.springframework.core.annotation.AnnotationAwareOrderComparator
 */
public interface OrderConstant extends Constant {

    //--------------------------------------------------
    // filter start
    //--------------------------------------------------

    /**
     * 跨域过滤器序号(跨域配置需要在其它过滤器/拦截器之前加载)
     */
    int CORS_FILTER_ORDER = -3;

    /**
     * traceId上下文过滤器序号
     */
    int TRACE_ID_CONTEXT_FILTER_ORDER = -2;

    /**
     * HTTP请求头设置过滤器序号
     */
    int HTTP_HEADERS_SETTING_FILTER_ORDER = -1;

    /**
     * 请求上下文过滤器序号
     */
    int REQUEST_CONTEXT_FILTER_ORDER = 0;

    /**
     * 请求日志过滤器序号
     */
    int REQUEST_LOGGING_FILTER_ORDER = 1;

    /**
     * 请求阻止过滤器序号
     */
    int REQUEST_BLOCKING_INFO_FILTER_ORDER = 2;

    //--------------------------------------------------
    // exception handler start
    //--------------------------------------------------

    /**
     * XuCloudException异常处理器序号
     */
    int XU_CLOUD_EXCEPTION_HANDLER_ORDER = 0;

    /**
     * Http相关Exception异常处理器序号
     */
    int HTTP_EXCEPTION_HANDLER_ORDER = 1;

    /**
     * DAO相关Exception异常处理器序号
     */
    int DAO_EXCEPTION_HANDLER_ORDER = 2;

    /**
     * JDK Exception异常处理器序号
     */
    int JDK_EXCEPTION_HANDLER_ORDER = 3;

    //--------------------------------------------------
    // request body advice start
    //--------------------------------------------------

    /**
     * 请求体解密后置通知处理器序号
     */
    int REQUEST_BODY_DECRYPT_ADVICE_ORDER = 2;

    //--------------------------------------------------
    // response body advice start
    //--------------------------------------------------

    /**
     * 返回值脱敏后置通知处理器序号
     */
    int DESENSITIZATION_RESPONSE_BODY_ADVICE_ORDER = 1;

    /**
     * 响应体加密后置通知处理器序号
     */
    int RESPONSE_BODY_ENCRYPT_ADVICE_ORDER = 2;

    /**
     * 统一返回值包装后置通知处理器序号
     */
    int XU_CLOUD_WRAPPER_RESPONSE_BODY_ADVICE_ORDER = 3;

    /**
     * 请求属性设置响应结果后置通知处理器序号
     */
    int RESULT_REQUEST_ATTRIBUTE_SETTING_ADVICE_ORDER = 4;

    /**
     * 错误码错误信息设置后置通知处理器序号
     */
    int ERROR_CODE_MSG_SETTING_ADVICE_ORDER = 5;
}
